#include <iostream>
#include <string>
#include "Log.hpp"
#include "Lister.hpp"
#include "Common.hpp"
#include "epollserver.hpp"

using namespace LogModule;

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        std::cout << "Usage :" << argv[0] << " port" << std::endl;
        return 1;
    }
    ENABLE_CONSOLE_LOG();
    uint16_t port = std::stoi(argv[1]);
    epollserver epoll_svr; // 创建epollserver对象

    Lister listen(port); // 创建监听套接字
    // auto conn = std::make_shared<Connection>(listen.Sockfd()); // 创建连接对象
    // conn->InitCB([&listen]() {                                 // 设置连接回调函数
    //     listen.Accepter();
    // },
    //              nullptr, nullptr); // 设置连接回调函数

    // conn->SetEvents(EPOLLIN | EPOLLET); // 设置连接事件

    auto conn = Factory::CreateConnection(listen.Sockfd(), EPOLLIN | EPOLLET, [&listen]() { // 设置连接回调函数
        listen.Accepter();
    },
                                          nullptr, nullptr);

    epoll_svr.InserConnction(conn); // 插入连接对象
    epoll_svr.Lop();                // 循环监听

    return 0;
}